OpenXava 3 教程

欢迎开始使用OpenXava的短暂旅行。
以下假定你已经启动了 OpenXava 中的Tomcat (已执行start-tomcat.sh o .bat) Eclipse 已打开,工作空间指向了 OpenXava下的workspace.

执行示例应用MySchool

OpenXava 发布中包含示例应用 MySchool,请按以下步骤执行。 任务执行中使用了ant targets. ant targets已经设定在Eclipse中, 要执行只需要点击 External Tools 按钮上的箭头external-tools.gif

修改示例应用MySchool

添加其他组件和模块

复制粘贴 src/org.openxava.school.model/Teacher.java 文件,重命名为Pupil.java.
代码如下

package org.openxava.school.model;
 
import javax.persistence.*;
import org.openxava.annotations.*;
 
@Entity
public class Pupil {
 
    @Id @Column(length=2) @Required
    private int number;
 
    @Column(length=40) @Required
    private String name;
 
    public int getNumber() {
        return number;
    }
 
    public void setNumber(int number) {
        this.number = number;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
}
然后可以将本文件发布.
所使用的ant targets used 已设定在Eclipse中, 要执行只需要点击 External Tools 按钮上的箭头external-tools.gif

将学生(pupil)关联到教师(teacher)

要让pupil参照 teacher,非常简单. 添加下面的代码到 Pupil 类中 :
@ManyToOne
private Teacher teacher;
 
public Teacher getTeacher() {
    return teacher;
}
 
public void setTeacher(Teacher teacher) {
    this.teacher = teacher;
}
现在可以测试一下:
你可以看到, 普通的清单式.
如果你想让参照关系用下拉框的形式体现, 你需要添加 @DescriptionsListPupil中的 teacher 参照:
@ManyToOne @DescriptionsList
private Teacher teacher;
请注意 @DescriptionsList 注解.
现在, 你的 Pupil 类如下:
package org.openxava.school.model;
 
import javax.persistence.*;
import org.openxava.annotations.*;
 
@Entity
public class Pupil {
 
    @Id @Column(length=2) @Required
    private int number;
 
    @Column(length=40) @Required
    private String name;
 
    @ManyToOne @DescriptionsList
    private Teacher teacher;
 
    public int getNumber() {
        return number;
    }
 
    public void setNumber(int number) {
        this.number = number;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Teacher getTeacher() {
        return teacher;
    }
 
    public void setTeacher(Teacher teacher) {
        this.teacher = teacher;
    }
 
}
重新发布:
现在我们将pupils 集合添加到teacher中. 首先, 添加下列包导入到Teacher类中:
import java.util.*;
然后在类中加入集合声明:
@OneToMany(mappedBy="teacher")
private Collection<Pupil> pupils;
 
public Collection<Pupil> getPupils() {
    return pupils;
}
 
public void setPupils(Collection<Pupil> pupils) {
    this.pupils = pupils;
}
 
修改后的Teacher class 如下:
package org.openxava.school.model;
 
import java.util.*;
import javax.persistence.*;
import org.openxava.annotations.*;
 
@Entity
public class Teacher {
 
    @Id @Column(length=5) @Required
    private String id;
 
    @Column(length=40) @Required
    private String name;
 
    @OneToMany(mappedBy="teacher")
    private Collection<Pupil> pupils;
 
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public Collection<Pupil> getPupils() {
        return pupils;
    }
 
    public void setPupils(Collection<Pupil> pupils) {
        this.pupils = pupils;
    }
 
}
再次发布:

执行MySchool应用的junit测试

切换到Eclipse 中的 MySchool 项目:
  • 指向 TeacherTest 类(in src/org.openxava.school.tests) 使用右键Run > JUnit Test
OpenXava junit测试在测试模块时就像一个真实的用户使用浏览器进行访问一样,所以可以将测试过程自动化。我鼓励你研究 TeachersTest 代码来搞清楚如何创建OpenXava测试。junit 测试对开发出高质量的应用程序是非常必要的。

就到这里, 朋友们
在这个例子中,你可以可出,小的改变意味着小的努力,效果马上就能体现到表单上。

帮助

如果你想了解所有OpenXava特性,这远远超出了这个简单示例的范围。你需要看的是OpenXavaTest项目, 特别是 ox3-src/org.openxava.test.model 包。

通过下面的链接,你可以获取本教程或者有关OpenXava 其他问题的帮助。
http://sourceforge.net/forum/forum.php?forum_id=419690

通过下列途径,你可以学到更多有关OpenXava的知识: